package com.qf;

import com.alibaba.fastjson.JSON;
import com.qf.vo.Car;
import com.qf.vo.Goods;
import lombok.SneakyThrows;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.BeanUtilsBean;

import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    public static void main(String[] args) {

//        Car car = new Car();
//
//        Map<String, Object> goodsMap = new HashMap<>();
//        goodsMap.put("gname", "商品名称");
//        goodsMap.put("gprice", 199.9);
//
//        Map<String, Object> carMap = new HashMap<>();
//        carMap.put("gid", 10);
//        carMap.put("uid", 12);
//        carMap.put("sum", 100);
//        carMap.put("subTotal", 99.9);
//        carMap.put("goods", goodsMap);
//
//        Goods goods = new Goods();
//        goods.setGname("商品");
//
//        List<Car> carList = new ArrayList<>();
//        carList.add(new Car(null, 10, 20, 4, goods, BigDecimal.valueOf(1999.90)));
//        carList.add(new Car(null, 11, 20, 5, goods, BigDecimal.valueOf(2999.90)));
//        carList.add(new Car(null, 12, 20, 5, goods, BigDecimal.valueOf(3999.90)));
//        carList.add(new Car(null, 13, 20, 6, goods, BigDecimal.valueOf(4999.90)));
//
//
//        Map<String, Object> map = new HashMap<>();
//        map.put("totalPrice", 100.0);
//        map.put("carList", carList);
//
//
//        String s = JSON.toJSONString(carList);
//
////        List<Car> car1 = JSON.parseObject(s, List.class);
//        List<Car> car1 = JSON.parseArray(s, Car.class);
//        for (Car car2 : car1) {
//            System.out.println(car2);
//            System.out.println(car2.getGoods().getGname());
//        }


//
//        System.out.println(carMap);
//
//        try {
//            BeanUtils.populate(car,carMap);
//        } catch (Exception e) {
//            System.err.println("拷贝参数出现异常");
//            System.out.println("car:"+car);
//        }
//        System.out.println(car);


//        String parse = JSON.toJSONString(carMap);
//
//        Car car1 = JSON.parseObject(parse, Car.class);
//
//        System.out.println(car1);

        // 模拟项目初期数据库和表的数量都是两个
//        int dbSize = 2;
//        int tabSize = 2;
//
//        // 用户id后四位
//        Integer uid = 1234;
//
//        // 模拟给数据库扩容4次 ，4,8,16,32(一般都是原来的2倍)
//        for (int i = 1; i <= 4; i++) {
//            Integer dbindex = uid % dbSize;
//            System.out.println("第【" + i + "】次购买:数据库【" + dbindex + "】，数据库的数量【"+dbSize+"】");
//            dbSize *= 2; // 原来的2倍
//        }

        // 不能内容的字符串会生成相同的hashCode --》hashCode不是唯一的
//        String a = "Aa1231231";
//        String b = "BB123123121321";
//        int c = 1234567890; //
//        int x = 1000;
//
//
//        int d = c * x;
//        System.out.println(d);
//        System.out.println("a:" + a.hashCode());
//        System.out.println("a:" + b.hashCode());

//         Map<String,String> map = new HashMap<>(); // 记录每个线程的名称

        // 使用ThreadLocal管理的对象是线程安全的？？三年 ？为什么？怎么实现的？？
//        // 是每个每个线程都创建了一个ThreadLocalMap
//        ThreadLocal<String> threadLocal = new ThreadLocal<>();
//
//        for (int i = 0; i < 2; i++) {
//            new Thread(() -> {
//                // 获取当前线程的每次
//                String name = Thread.currentThread().getName();
//
//                // 把当前线程的name放到name中
////                map.put("name",name);
//                threadLocal.set(name);
//
////                try {
////                    Thread.sleep(500);
////                } catch (InterruptedException e) {
////                    e.printStackTrace();
////                }
//
////                String val = map.get("name");
//                String val = threadLocal.get();
//
//                System.out.println(name+":"+val);
//
//            }, "线程_" + i).start();
//        }

      String oid = "2021072608465004243";

        String substring = oid.substring(13, 13 + 4);
        System.out.println(substring);
    }
}
